// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
//
// #include "Address Book(SeqList)/SeqList.h"
//
// #define MAXSIZE 100
// typedef int ElemType;
//
// typedef struct Stack {
//     ElemType data[MAXSIZE];
//     int top;
// } Stack;
//
// void InitStack(Stack* s) {
//     if (s == NULL) return;
//     s->top = -1;
// }
//
// bool isNull(Stack* s) {
//     return s == NULL || s->top == -1;
// }
//
// bool isFull(Stack* s) {
//     return s != NULL && s->top == MAXSIZE - 1;
// }
//
// void Push(Stack* s, ElemType value) {
//     if (isFull(s)) {
//         printf("栈已满\n");
//         return;
//     }
//     s->data[++s->top] = value;
// }
//
// ElemType Pop(Stack* s) {
//     if (isNull(s)) {
//         printf("栈为空\n");
//         return -1; // 错误码
//     }
//     return s->data[s->top--];
// }
//
// ElemType Top(Stack* s) {
//     if (isNull(s)) {
//         printf("栈为空\n");
//         return -1;
//     }
//     return s->data[s->top];
// }
//
// void PrintStack(Stack* s) {
//     if (isNull(s)) {
//         printf("栈为空\n");
//         return;
//     }
//     for (int i = 0; i <= s->top; i++) {
//         printf("%d ", s->data[i]);
//     }
//     printf("\n");
// }
//
// // 支持 min 操作的栈结构
// typedef struct MinStack {
//     Stack main;   // 主栈
//     Stack min;    // 辅助栈（记录最小值）
// } MinStack;
//
// void MinStack_Init(MinStack* ms) {
//     if (ms == NULL) return;
//     InitStack(&ms->main);
//     InitStack(&ms->min);
// }
//
// void MinStack_Push(MinStack* ms, ElemType value) {
//     if (ms == NULL) return;
//
//     // 主栈压入元素
//     Push(&ms->main, value);
//
//     // 辅助栈压入当前最小值
//     if (isNull(&ms->min) || value <= Top(&ms->min)) {
//         Push(&ms->min, value);
//     } else {
//         Push(&ms->min, Top(&ms->min)); // 保持栈顶为最小值
//     }
// }
//
// ElemType MinStack_Pop(MinStack* ms) {
//     if (isNull(&ms->main)) {
//         printf("栈为空\n");
//         return -1;
//     }
//
//     // 同步弹出辅助栈
//     Pop(&ms->min);
//     return Pop(&ms->main);
// }
//
// ElemType MinStack_Min(MinStack* ms) {
//     if (isNull(&ms->min)) {
//         printf("栈为空\n");
//         return -1;
//     }
//     return Top(&ms->min);
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     MinStack ms;
//     MinStack_Init(&ms);
//
//     // 测试压栈
//     MinStack_Push(&ms, 3);
//     MinStack_Push(&ms, -10);
//     MinStack_Push(&ms, 20);
//     MinStack_Push(&ms, 3);
//
//     printf("主栈: ");
//     PrintStack(&ms.main);
//     printf("最小值栈: ");
//     PrintStack(&ms.min);
//     printf("当前最小值为: %d\n", MinStack_Min(&ms));
//
//     // 测试弹栈
//     printf("弹出元素: %d\n", MinStack_Pop(&ms));
//     printf("弹出后最小值: %d\n", MinStack_Min(&ms));
//
//     return 0;
// }